package main

import "fmt"

/*
接口对象转型介绍
*/
func main() {

	var b1 B = "string"
	var b2 B = 32
	var b3 B = 45.786
	var b4 B = false

	/*
		一. 接口对象转型第一种方式： instance, ok := 接口对象.(实际类型)
			如果该接口对象是对应的实际类型，那么instance就是转型之后的对象，ok的值为true，配合if ... else if...语句使用
	*/
	if instance, ok := b1.(string); ok {
		fmt.Println("是string类型，值为：", instance)
	}

	if instance, ok := b1.(int); ok {
		fmt.Println("是int类型，值为：", instance)
	} else {
		fmt.Println("不是int类型，值为", instance)
	}

	/*
		二. 接口对象转型第二种方式：接口对象.(type)
			此方式配合switch...case语句使用
	*/
	getType(b1)
	getType(b2)
	getType(b3)
	getType(b4)
}

/*
空接口
*/
type B interface {
}

func getType(i B) {

	switch i.(type) {
	case string:
		fmt.Println("是字符串类型")
	case int:
		fmt.Println("是整数类型")
	case float64, float32:
		fmt.Println("是浮点数类型")
	default:
		fmt.Println("未定义类型")
	}
}
